<?php
/**类包含方法说明
getParam	获取数据表所有字段","隔开
Insert		插入数据
Update		更新数据
RsCount		计录集数量
Clear		清空跟表字段相关的对象属性
GetOne		获取一个条数据，并给对象赋值
GetAll		获取所有符合条件的数据
Del			删除指定条件的数据
GetVal		根据主键获取对应字段的值
SetVal		根据主键设置对应的字段值
*/

class Tbl_Act {
	// $this->tbl			//表名
	// $this->params		//字段名
	// $this->Tbl_Id			//主键名
	// $this->printsql		//是否打印sql 1：打印
	
	/**
	* 主方法
	* @param tbl		表名
	* @param tbl_id		自动增长编号字段名
	*/
	function Tbl_Act($tbl,$tbl_id='id')
	{
		$this->printsql=0;							//是否打印sql语句 1：打印
		$this->tbl=$tbl;							//定义数据表
		$this->params=$this->getParam();			//获取字段
		$this->Tbl_Id=$tbl_id;						//主键名
	}

	/**
	*查询字段
	*/
	function getParam()
	{
		global $db;
		$sql="show columns from ".$this->tbl;
		$rs=$db->Execute($sql);
		$ss='';
		while($rs && $row=$rs->FetchRow())
		{
			if($ss=='')
			{
				$ss=$row['Field'];
			}
			else
			{
				$ss.=','.$row['Field'];
			}
		}
		return $ss;
	}

	/*
	* 插入新数据
	*/
	function Insert()
	{
		global $db;
		$sql="insert into $this->tbl set ";
		$set='';		//初始化插入数据为空
		$aryparam=explode(',',$this->params);
		if(is_array($aryparam))
		{
			foreach($aryparam as $key =>$value)
			{
				if(isset($this->$value) && $this->$value!=$this->Tbl_Id)
				{
					$this->$value=str_replace("'","\\'",$this->$value);
					if($set=='')
					{
						$set=$value."='".$this->$value."'";
					}
					else
					{
						$set.=",".$value."='".$this->$value."'";
					}
				}
				else
				{
					continue;
				}
			}
		}

		if($set!='')
		{
			$sql.=$set;
		}
		else
		{
			return false;
		}
		if($this->printsql==1)
		{
			echo '<br>Insert| '.$sql.'<br>';
		}
		$rs=$db->Execute($sql);
		if($rs)
		{
			$insertid=$db->Insert_ID();
			return $insertid;
		}
		else
		{
			return false;
		}
	}

	/**
	* 修改数据
	* @param id		自动增长编号的值
	* @param conv	其他条件 留空为没有其他条件
	*/
	function Update($id='',$conv='')
	{
		$autoid=$this->Tbl_Id;			//自动编号字段
		if($id!='')
		{					
			$this->$autoid=$id;			//赋值
		}
		else
		{
			if($this->$autoid=='')
			{
				echo 'Tbl_Act->Update()运行失败，参数错误';
				return false;
			}
			else
			{
				$id=$this->$autoid;
			}
		}
		global $db;
		$sql="update $this->tbl set ";
		$set='';		//初始化插入数据为空
		$aryparam=explode(',',$this->params);
		if(is_array($aryparam))
		{
			foreach($aryparam as $key =>$value)
			{
				if(isset($this->$value))
				{
					$this->$value=str_replace("'","\\'",$this->$value);
					if($set=='')
					{
						$set=$value."='".$this->$value."'";
					}
					else
					{
						$set.=",".$value."='".$this->$value."'";
					}
				}
				else
				{
					continue;
				}
			}
		}
		if($set!='')
		{
			$sql.=$set." where ".$autoid."='$id' ".$conv;
		}
		else
		{
			return false;
		}
		if($this->printsql==1)
		{
			echo '<br>Update| '.$sql.'<br>';
		}
		$rs=$db->Execute($sql);
		if($rs)
		{
			$this->id=$id;
			return $id;
		}
		else
		{
			return false;
		}
	}

	/**
	* 计算数据数量是否有重复数据
	* @param aryParams	检测字段数组sample array('a,=','b,like') 这里a字段精确匹配,b字段模糊匹配
	* @param otherconv	其他补充条件
	* Return Int
	*/
	function RsCount($aryParams,$otherconv='')
	{
		global $db;
		$conv='where 1';
		if(is_array($aryParams))
		{
			foreach($aryParams as $key => $value)
			{
				$value1=explode(',',$value);
				if($value1[1]=='like')
				{
					$conv.=" and ".$value1[0]." like '%".$this->$value1[0]."%'";
				}
				else
				{
					$conv.=" and ".$value1[0]." ".$value1[1]." '".$this->$value1[0]."'";
				}
			}
		}
		else
		{
			$conv='';
		}
		$sql="select count(*) num from ".$this->tbl." ".$conv.$otherconv;
		if($this->printsql==1)
		{
			echo '<br>RsCount| '.$sql.'<br>';
		}
		$rs=$db->Execute($sql);
		if($rs && $row=$rs->FetchRow())
		{
			return $row['num'];
		}
		else
		{
			return false;
		}
	}

	/**
	* 清空类中对象
	*/
	function Clear()
	{
		$params=$this->params;
		$aryParams=explode(",",$params);
		if(is_array($aryParams))
		{
			foreach($aryParams as $key => $value)
			{
				unset($this->$value);
			}
			return true;
		}
		else
		{
			return false;
		}
	}

	/**
	* 获取一个条数据，并给对象赋值
	* @param aryParams	检测字段数组sample array('a,=','b,like') 这里a字段精确匹配,b字段模糊匹配
	* @param otherconv	其他补充条件
	* @param params		需要查询的字段
	* Return Boolean
	*/
	function GetOne($aryParams='',$otherconv='',$params='*')
	{
		global $db;
		if(is_array($aryParams))
		{
			$conv='1';
			foreach($aryParams as $key => $value)
			{
				$value1=explode(',',$value);
				if($value1[1]=='like')
				{
					$conv.=" and ".$value1[0]." like '%".$this->$value1[0]."%'";
				}
				else
				{
					$conv.=" and ".$value1[0]." ".$value1[1]." '".$this->$value1[0]."'";
				}
			}
		}
		else
		{
			$tbl_id=$this->Tbl_Id;
			$conv=$this->Tbl_Id."='".$this->$tbl_id."'";
		}
		$sql="select $params from ".$this->tbl." where ".$conv.$otherconv;
		$sql.=" limit 0,1";
		if($this->printsql==1)
		{
			echo '<br>GetOne| '.$sql.'<br>';
		}
		$rs=$db->Execute($sql);
		if($rs && $row=$rs->FetchRow())
		{
			if($params=='*')
			{
				$aryParams=explode(',',$this->params);
			}
			else
			{
				$aryParams=explode(',',$params);
			}
			if(is_array($aryParams))
			{
				foreach($aryParams as $key => $value)
				{
					$this->$value=$row[$value];
				}
				return true;
			}
			else
			{
				return false;
			}
			
		}
		else
		{
			return false;
		}
	}

	/*
	* 查询符合条件的指定字段
	* @param params	字段名,用","分隔开
	* @param where	查询条件
	*/
	function GetAll($params='*',$where='')
	{
		global $db;
		$sql="select $params from $this->tbl $where";
		if($this->printsql==1)
		{
			echo '<br>GetAll| '.$sql.'<br>';
		}
		$rows=$db->GetAll($sql);
		return $rows;
	}

	/**
	* 删除数据
	* @param arrayid	主键id 数组
	* @param conv		删除附加条件
	* Return Boolean
	*/
	function Del($arrayid='',$conv="")
	{
		
		$autoid=$this->Tbl_Id;		//自动编号字段
		if($arrayid=='')
		{
			$arrayid=$this->$autoid;
		}
		$arrayid=explode(',',$arrayid);			//赋值
		global $db;
		$where="";
		$sql="delete from  $this->tbl";
		if(is_array($arrayid)){
			foreach($arrayid as $key=>$value)
			{
				if(isset($value))
					{
						$where= ($autoid)."='$value'";
						$sqlb=$sql." where ".$where;
						if($conv!='')
						{
							$sqlb.=$conv;
						}
						if($this->printsql==1)
						{
		    			echo '<br>Delete| '.$sqlb.'<br>';
						}

						$drs=$db->Execute($sqlb);
						if(!$drs)
						{
							return false;
						}
					}
			$where="";
			}
		  return  true;
		}

	}
	
	/** GetVal 根据主键获取对应字段的值
	* @param p 		字段名
	* @param k		主键的值
	* @return String
		error1	缺少主键
		error2	缺少待查询字段
		error3	没有相关记录数
	*/
	function GetVal($p,$k='',$conv='')
	{
		if(empty($this->Tbl_Id))
		{
			return 'error1!';
		}
		$tbl_id=$this->Tbl_Id;	//主键
		if(!empty($k))
		{
			$this->$tbl_id=$k;
		}
		if(empty($p))
		{
			return 'error2!';
		}
		//查询开始
		$sql="select $p from ".$this->tbl." where ".$this->Tbl_Id."='".$this->$tbl_id."'";
		if(!empty($conv))
		{
			$sql.=$conv;
		}
		$sql.=" limit 0,1";
		if($this->printsql==1)
		{
			echo '<br>GetVal| '.$sql.'<br>';
		}
		global $db;
		$rs=$db->Execute($sql);
		if($rs && $row=$rs->FetchRow())
		{
			return $row[$p];
		}
		else
		{
			return '';
		}
	}
	
	/** SetVal 根据主键设置对应的字段值
	* @param p	字段名 
	* @param v	值
	* @param k	主键
	* @param conv	其他条件
	* @return Boolean
	*/
	function SetVal($p,$v,$k='',$conv='')
	{
		if(empty($this->Tbl_Id))
		{
			return false;
		}
		$tbl_id=$this->Tbl_Id;	//主键
		if(!empty($k))
		{
			$this->$tbl_id=$k;
		}
		if(empty($p))
		{
			return false;
		}
		//查询开始
		$sql="update ".$this->tbl." set $p='$v' where ".$this->Tbl_Id."='".$this->$tbl_id."'";
		if(!empty($conv))
		{
			$sql.=$conv;
		}
		if($this->printsql==1)
		{
			echo '<br>SetVal| '.$sql.'<br>';
		}
		global $db;
		$rs=$db->Execute($sql);
		if($rs)
		{
			return true;
		}
		else
		{
			return false;
		}
	}
}
?>